package com.unitd.frame.sso.common.parser.api;

import com.unitd.frame.sso.common.config.SSOConfig;
import com.unitd.frame.comm.exception.EncryptException;

/**
 * @desc 提供提取消息格式中的密文及生成回复消息格式
 * 用于加解密消息与json之间的交互转换处理
 * @filename JSONParser.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/15
 */
public class JSONParser {

	/**
	 * @desc 将加密消息生成 JSON 消息
	 * @param encrypt   加密后的消息密文
	 * @param signature 安全签名
	 * @param timeStamp 时间戳
	 * @param nonce     随机字符串
	 * @return 生成的加密后的 JSON 字符串
	 */
	public static String generate(String encrypt, String signature, String timeStamp, String nonce) {
		SSOConfig config = SSOConfig.getInstance();
		return config.getParser().toJson(new EncryptMsg(encrypt, signature, timeStamp, nonce));
	}

	/**
	 * @desc 提取出 JSON 数据包中的加密消息
	 * @param json 待提取的JSON字符串
	 * @return 提取出的加密消息字符串
	 * @throws EncryptException {@link EncryptException}
	 */
	public static EncryptMsg extract(String json) throws EncryptException {
		try {
			SSOConfig config = SSOConfig.getInstance();
			return config.getParser().parseObject(json, EncryptMsg.class);
		} catch (Exception e) {
			throw new EncryptException(EncryptException.ERROR_PARSE_JSON, e);
		}
	}
}